Several types of memory devices, such as Flash memories, use arrays of analog memory cells for storing data. Each analog memory cell stores a quantity of an analog value, also referred to as a storage value, such as an electrical charge or voltage. This analog value represents the information stored in the cell. In Flash memories, for example, each analog memory cell holds a certain amount of electrical charge. The range of possible analog values is typically divided into intervals, each interval corresponding to one or more data bit values. Data is written to an analog memory cell by writing a nominal analog value that corresponds to the desired bit or bits. Some memory devices, commonly referred to as Single-Level Cell (SLC) devices, store a single bit of information in each memory cell, i.e., each memory cell can be programmed to assume either of two possible programming levels. Higher-density devices, often referred to as Multi-Level Cell (MLC) devices, store two or more bits per memory cell, i.e., can be programmed to assume more than two possible programming levels.
Data that is stored in memory is sometimes encoded with an Error Correction Code (ECC) in order to reduce the likelihood of read errors. For example, Goodman and Sayano describe a number of on-chip coding techniques for the protection of Random Access Memory (RAM) devices, which use multi-level storage cells, in “On-Chip ECC for Multi-Level Random Access Memories,” Proceedings of the 1989 IEEE/CAM Information Theory Workshop, Jun. 25-29, 1989, Ithaca, N.Y., which is incorporated herein by reference. As another example, U.S. Pat. No. 6,212,654, whose disclosure is incorporated herein by reference, describes methods for storing data in an analog memory device using coded modulation techniques. Other ECC schemes for multilevel memory devices are described in U.S. Pat. No. 6,469,931, whose disclosure is incorporated herein by reference.
U.S. Patent Application Publication 2004/0083333, whose disclosure is incorporated herein by reference, describes techniques for using different ECC algorithms to encode and to decode contents of blocks within a non-volatile memory. U.S. Patent Application Publication 2004/0083334, whose disclosure is incorporated herein by reference, describes techniques for encoding data associated with a page by dividing the page into segments and separately encoding the segments using extended ECC calculations.